#!/usr/bin/env python
# coding:utf-8
from PoboAPI import *
import datetime
import numpy as np


#开始时间，用于初始化一些参数
def OnStart(context) :
    print "I\'m starting..."
    #登录交易账号，需在主页用户管理中设置账号，并把期货测试替换成您的账户名称
    context.myacc = None
    if context.accounts.has_key("回测期货") :
        print "登录交易账号[回测期货]"
        if context.accounts["回测期货"].Login() :
            context.myacc = context.accounts["回测期货"]

def OnMarketQuotationInitialEx(context, exchange,daynight):
    if exchange != 'SHFE':
        return
    #获取主力合约
    g.code = GetMainContract('SHFE', 'rb',20)
    #订阅K线数据，用于驱动OnBar事件
    SubscribeBar(g.code, BarType.Day) 
    
#实时行情事件，当有新行情出现时调用该事件Ex
def OnBar(context,code,bartype) :
    #过滤掉不需要的行情通知
    if code != g.code:
        return
    dyndata = GetQuote(g.code)
    #计算均线
    EXPMAdata = GetIndicator("EXPMA",code,params=(5,10),bar_type = BarType.Day)
    #print "expma "+str(EXPMAdata)
    EXPMA5 = EXPMAdata["MA1"]
    EXPMA10 = EXPMAdata["MA2"]
    
    if len(EXPMA10)<2: #when data length is too short, do nothing
        return
    #ma1上穿ma2时买入螺纹主力1手
    elif EXPMA5[-1] >= EXPMA10[-1] and EXPMA5[-2]<EXPMA10[-2]:
        print "now EXPMA5 "+str(EXPMA5[-1])+" EXPMA10 "+str(EXPMA10[-1])+"pre EXPMA5 "+str(EXPMA5[-2])+" EXPMA10 "+str(EXPMA10[-2])
        print "time to buy open"
        QuickInsertOrder(context.myacc,g.code,'buy','open',dyndata.now,1)
    #ma1下穿ma2时卖出平仓
    elif EXPMA5[-1] <= EXPMA10[-1] and EXPMA5[-2]>EXPMA10[-2]:
        print "EXPMA5 "+str(EXPMA5[-1])+" EXPMA10 "+str(EXPMA10[-1])+"pre EXPMA5 "+str(EXPMA5[-2])+" EXPMA10 "+str(EXPMA10[-2])
        print "time to sell close"
        QuickInsertOrder(context.myacc,g.code,'sell','close',dyndata.now,1)
